#ifndef	_XLINIX_PROTO_H_
#define	_XLINIX_PROTO_H_


/* klib.asm */
PUBLIC void	out_byte(t_port port, t_8 value);
PUBLIC t_8	in_byte(t_port port);
PUBLIC void	disp_str(char * info);
PUBLIC void	disp_color_str(char * info, int color);
PUBLIC void disable_irq(int irq);
PUBLIC void enable_irq(int irq);
PUBLIC void disable_int();
PUBLIC void enable_int();

/* kernel.asm */
void restart();
PUBLIC void sys_call(); // 中断

/* klib.c */
PUBLIC void disp_int(int input);
PUBLIC void delay(int time);

/* protect.c */
PUBLIC void init_prot();
PUBLIC t_32 seg2phys(t_16 seg);

/* i8259.c */
PUBLIC void init_8259A();
PUBLIC void put_irq_handler(int irq, t_pf_irq_handler handler);
PUBLIC void spurious_irq(int irq);

/* clock.c */
PUBLIC void clock_handler(int irq);
PUBLIC void milli_delay(int milli_sec);
PUBLIC void init_clock();

/* keyboard.c */
PUBLIC void keyboard_handler(int irq);
PUBLIC void init_keyboard();
PUBLIC void keyboard_read();

/* proc.c */
PUBLIC int sys_get_ticks(); // 系统调用
PUBLIC void schedule();     // 进程调度

/* tty.c */
PUBLIC void task_tty();
PUBLIC void in_process(TTY* p_tty, t_32 key);
PUBLIC int sys_write(char* buf, int len, PROCESS* p_proc);  // 系统调用

/* syscall.asm */
PUBLIC int get_ticks();
PUBLIC void write(char* buf, int len);

/* main.c */
void TestA();
void TestB();
void TestC();

/* console.c */
PUBLIC t_bool is_current_console(CONSOLE* p_con);
PUBLIC void out_char(CONSOLE* p_con, char ch);
PUBLIC void init_screen(TTY* p_tty);
PUBLIC void select_console(int nr_console);
PUBLIC void scroll_screen(CONSOLE* p_con, int direction);

/* printf.c vsprintf.c */
int printf(const char* fmt, ...);
int vsprintf(char *buf, const char *fmt, va_list args);


#endif /* _XLINIX_PROTO_H_ */